
//if  else 的使用方法和其他语言一样

//Rust里的if语句可以用来赋值,而且判断条件不需要加().

fn main() {
    let condition = true;
    let number = if condition {
        5
    } else {
        6
    };
    println!("The value of number is: {}", number);
}
//用if来赋值时，要保证每个分支返回的类型一样(事实上，这种说法不完全准确，见这里)，此处返回的5和6就是同一个类型，如果返回类型不一致就会报错

fn main() {
    let n = 6;
    if n % 4 == 0 {
        println!("number is divisible by 4");
    } else if n % 3 == 0 {
        println!("number is divisible by 3");
    } else if n % 2 == 0 {
        println!("number is divisible by 2");
    } else {
        println!("number is not divisible by 4, 3, or 2");
    }
}


//循环控制
fn main()
{
    for i in 0..=5
    {
        println!("{}",i);
    }
}

// 注意，使用for时我们往往使用集合的引用形式，除非你不想在后面的代码中继续使用该集合（比如我们这里使用了container的引用）。
// 如果不使用引用的话，所有权会被转移到for语句块中，后面就无法再使用这个集合了);
for item in &container {
    // ...
}

// 如果想在循环中，修改该元素，可以使用mut关键字：
for item in &mut collection {
    // ...
  }


//   如果想在循环中获取元素的索引：
fn main() {
    let a = [4,3,2,1];
    // `.iter()`方法把`a`数组变成一个迭代器
    for (i,v) in a.iter().enumerate() {
        println!("第{}个元素是{}",i+1,v);
    }
}

// 想用for循环控制某个过程执行10次，但是又不想单独声明一个变量来控制这个流程，该怎么写？
for _ in 0..10 {
    // ...
}
// _来替代i用于for循环中，在Rust中_的含义是忽略该值或者类型的意思，如果不使用_，那么编译器会给你一个变量未使用的的警告。



//while循环和其他语言一样，只是条件判断语句没有()
fn main() {
    let mut n = 0;

    while n <= 5  {
        println!("{}!", n);

        n = n + 1;
    }

    println!("我出来了！");
}

//特有的 loop 循环，loop就是一个简单的无限循环，你可以在内部实现逻辑通过break关键字来控制循环何时结束。
fn main() {
    let mut n = 0;

    loop {
        if n > 5 {
            break
        }
        println!("{}",n);
        n+=1;
    }

    println!("我出来了！");
}


// 因此，当使用loop时，必不可少的伙伴是break关键字，它能让循环在满足某个条件时跳出：
fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;

        if counter == 10 {
            break counter * 2;
        }
    };
    println!("The result is {}", result);
}
//注意！！
// break可以单独使用，也可以带一个返回值，有些类似return
// loop是一个表达式，因此可以返回一个值